
// 寻找的是前缀和之间的差值是否等于 k 
// 对于当前的 prefixSum，如果存在某个先前的前缀和 prefixSum - k，那么从该先前前缀和到当前前缀和之间的子数组和就是 k。

var subarraySum = function(nums, k) {
  const len = nums.length;
  // 保存前缀和
  const map = new Map();
  map.set(0, 1);

  let prefixSum = 0, ans = 0;

  for (let i = 0; i < len; i++) {
    prefixSum += nums[i];
    // 满足前缀和之间的差值是等于 k 
    if (map.has(prefixSum - k)) {
      ans += map.get(prefixSum - k);
    }
    if (map.has(prefixSum)) {
      map.set(prefixSum, map.get(prefixSum) + 1);
    } else {
      map.set(prefixSum, 1);
    }
  }
  return ans;
};


const nums = [1,2,3], k = 3;
console.log(subarraySum(nums, k))